package com.shangma.util;

/**
 * @className: POIDemo
 * @description:
 * @date:2021/12/23 9:48
 */

import cn.hutool.core.io.FileUtil;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.word.Word07Writer;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.junit.Test;

import java.awt.*;
import java.awt.Font;
import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * 读取表格
 *
 */
public class POIDemo {

    @Test
    public void fun02(){
//        ExcelReader reader = ExcelUtil.getReader(FileUtil.file("e:\\employee.xlsx"),1);

//        List<List<Object>> read = reader.read();
//        // 读取key = value形式
////        List<Map<String, Object>> maps = reader.readAll();
//        System.out.println(read);


        Word07Writer writer = new Word07Writer();

// 添加段落（标题）
        writer.addText(new Font("方正小标宋简体", Font.BOLD, 40), "我是第一部分", "我是第二部分");
// 添加段落（正文）
        writer.addText(new Font("宋体", Font.PLAIN, 22), "我是正文第一部分", "我是正文第二部分");
// 写出到文件
        writer.flush(FileUtil.file("e:/wordWrite.docx"));
// 关闭
        writer.close();
    }

    @Test
    public void fun() throws IOException {
        //加载excel文件
        Workbook workbook = new XSSFWorkbook("e:\\employee.xlsx");

        // 通过工作簿找到sheet
            Sheet sheet = workbook.getSheetAt(0);
            // 获取一共有多少行
            int maxRow = sheet.getLastRowNum();
            for (int i = 0;i <= maxRow;i++){
                // 获取具体的每一行
                Row row = sheet.getRow(i);
                // 获取这一行有多少个单元格
                short maxCell = row.getLastCellNum();

                StringBuilder sb = new StringBuilder();
                for (int j = 0;j <= maxCell;j++){
                    // 获取具体的单元格
                    Cell cell = row.getCell(j);
                    if (cell != null){
                        Object value = getValue(cell);
                        sb.append(value).append("---");
                    }
                }
                System.out.println(sb.toString());
        }

    }

    public Object getValue(Cell cell){
        // 获取cell中值对应的类型枚举
        CellType cellType = cell.getCellType();
        Object obj = null;
        switch (cellType){
            case STRING://字符串类型
                obj = cell.getStringCellValue();
                break;
            case BOOLEAN://boolean类型
                obj = cell.getBooleanCellValue();
                break;
            case NUMERIC://数字和日期类型
                if (DateUtil.isCellDateFormatted(cell)){
                    // 日期类型
                    obj = cell.getDateCellValue();
                }else {
                    //数字类型
                    obj = cell.getNumericCellValue();
                }
                break;
            case FORMULA://如果是公式类型
                obj = cell.getCellFormula();
                break;
        }
        return obj;
    }

}
